% coding: utf-8

\section{Desarrollo}


\subsection{Primera parte: Ping en sus distintos sabores.}

\subsubsection{ARPing}
La idea de esta función es enviar un paquete ARP dentro de un segmento de red y analizar qué pasa tanto si no se encuentra la dirección IP de destino como si la encuentra.

Para programar esta función, armamos el paquete ARP (con la primitiva que vimos en la sección anterior) estableciendo su dirección destino como la IP que recibimos de parámetro, de la que queremos conocer su MAC. Luego enviamos este paquete a la dirección de MAC broadcast FF:FF:FF:FF:FF:FF. Si se recibe un paquete de respuesta, se considera que el host está vivo. Si por el contrario no se obtiene respuesta pasado un timeout definido, se considera que el host está caído o es inalcanzable.

Para las siguientes pruebas se tienen en cuenta los siguiente datos:

\begin{verbatim}
 root@bt:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:c1:56:1f  
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
\end{verbatim}
Entonces probamos la función con direcciones IP dentro de la red 10.0.2.0 con máscara /24

\begin{itemize}

	\item{Caso 1:} Preguntamos por nuestra misma ip. Es decir, psrc=pdst

	\begin{verbatim}
>>> arping('10.0.2.15')
Begin emission:
Finished to send 1 packets.

Received 0 packets, got 0 answers, remaining 1 packets
###[ ARP ]###
  hwtype    = 0x1
  ptype     = 0x800
  hwlen     = 6
  plen      = 4
  op        = who-has
  hwsrc     = 08:00:27:c1:56:1f
  psrc      = 10.0.2.15
  hwdst     = ff:ff:ff:ff:ff:ff
  pdst      = 10.0.2.15
(False, None)
>>> 

	\end{verbatim}

	\item{Caso 2:} preguntar por la ip 10.0.2.2 (que se encuentra dentro del segmento de red 10.0.2.0/24)

	\begin{verbatim}
>>> arping('10.0.2.2')
Begin emission:
*Finished to send 1 packets.

Received 1 packets, got 1 answers, remaining 0 packets
###[ ARP ]###
  hwtype    = 0x1
  ptype     = 0x800
  hwlen     = 6
  plen      = 4
  op        = who-has
  hwsrc     = 08:00:27:c1:56:1f
  psrc      = 10.0.2.15
  hwdst     = ff:ff:ff:ff:ff:ff
  pdst      = 10.0.2.2
(True, <ARP  hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at 
hwsrc=52:54:00:12:35:02 psrc=10.0.2.2 hwdst=08:00:27:c1:56:1f 
pdst=10.0.2.15 | <Padding  load=
'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>)
	\end{verbatim}


\end{itemize}


\subsubsection{ICMPing} 
Para esta función, vemos si un host está vivo enviando un mensaje ICMP de tipo \textit{Echo Request}. Si la respuesta es positiva, recibimos un paquete de tipo \textit{Echo Reply}. 
Para evaluar el funcionamiento vamos a invocar la función tanto para direcciones ip pertenecientes a la red 10.0.2.0/24 como para direcciones por fuera de ella (públicas y privadas).

\begin{itemize}
	\item{Caso 1:} Se invoca la función con la IP 200.58.112.50, que está por fuera de la red de prueba, y es pública.

	\begin{verbatim}
>>> icmping('200.58.112.50')
Begin emission:
.Finished to send 1 packets.
*
Received 2 packets, got 1 answers, remaining 0 packets
(True, <IP  version=4L ihl=5L tos=0x0 len=39 id=57 flags= frag=0L ttl=63 
proto=icmp chksum=0x3722 src=200.58.112.50 dst=10.0.2.15 options=[] |
<ICMP  type=echo-reply code=0 chksum=0xbc3f id=0x0 seq=0x0 |<Raw  
load='tp de redes' |<Padding  load='\x00\x00\x00\x00\x00\x00\x00' |>>>>)
	\end{verbatim}

	\item{Caso 2:} Se invoca la función con la IP 192.168.1.25, que está por fuera de la red de prueba, y es privada.

	\begin{verbatim}
>>> icmping('192.168.1.25')
Begin emission:
Finished to send 1 packets.

Received 0 packets, got 0 answers, remaining 1 packets
(False, None)

	\end{verbatim}


	\item{Caso 3:} Ahora se invoca la función para direcciones ip de la red
	\begin{verbatim}
>>> icmping('10.0.2.255')
Begin emission:
Finished to send 1 packets.

Received 0 packets, got 0 answers, remaining 1 packets
(False, None)

>>> icmping('10.0.2.2')
Begin emission:
.Finished to send 1 packets.
*
Received 2 packets, got 1 answers, remaining 0 packets
(True, <IP  version=4L ihl=5L tos=0x0 len=39 id=58 flags= frag=0L ttl=63 
proto=icmp chksum=0x638c src=10.0.2.2 dst=10.0.2.15 options=[] |
<ICMP  type=echo-reply code=0 chksum=0xbc3f id=0x0 seq=0x0 |<Raw  
load='tp de redes' |<Padding  load='\x00\x00\x00\x00\x00\x00\x00' |>>>>)

	\end{verbatim}

	\item{Caso 4:} Ahora probamos con nuestra propia IP

	\begin{verbatim}
>>> icmping('10.0.2.15')
Begin emission:
Finished to send 1 packets.
.
Received 1 packets, got 0 answers, remaining 1 packets
(False, None)
	\end{verbatim}

\end{itemize}

